動畫就從最簡單的兩光干涉吧開始畫吧!
兩個光干涉就只要相加就可以了,干涉方式會以波長的公倍數,形成像波包一樣的beat。
程式碼如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
#定義正弦波
def wave(w, t):
return np.sin(w*t)
N = 5001 #定義製圖細緻度
T= 20 #時間範圍
t_list = [T*i/N + 0 for i in range(N)]#時間點的集合
#製圖
fig, ax = plt.subplots() #定義製圖範圍
#定義動畫方程
def update(dw):
ax.clear()#每次先將上一個圖清除
#定義波的頻率:
w1 = 10*2*np.pi
w2 = w1+dw*2*np.pi
#將波的數值帶入運算式
wave1 = [wave(w1, t_list[i]) for i in range(N)]
wave2 = [wave(w2, t_list[i]) for i in range(N)]
#兩波干涉公式 兩波相加
beat = [wave1[i]+ wave2[i] for i in range(N)]
#將兩個波畫成圖
ax.plot(t_list, beat)
#定義每個frame要給的參數
dw_list= [0.1*i for i in range(20)]
#製作動畫
ani = animation.FuncAnimation(fig, update, dw_list)
ani.save('2waves_inteference.gif', writer='pillow')
plt.show()
T-Da~可以清楚地看到兩波干涉的情形,這次的程式碼是助教帶著寫出來的,在這裡和各位分享。
這段程式和昨天chatGPT給的展示程式碼差異最大的地方,我認為是在ax.clear()這一行。
如果助教給的這個程式沒清除,跑出來會像這樣,舊的點和新的都疊再一起:
但如果把ax.clear()加到昨天的迴圈中,則是完全跑不出動畫。
丟了chatGPT問為何,得出的解釋為——數據更新方式的不同:
看完我就瞭解了,能有AI和助教一起教我,我真幸福呀!